<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    var combine = function(n, k) {
        let ans = [];
        // crr当前遍历的数值，题目要求组合成k个数的组合，arr当前存的数值数组
        const dfs = (crr, k, arr) => {
            // 剪枝，如果数组长度，加上剩余数的个数，都无法组成k个数的组合，直接return
            if (arr.length + (n - crr + 1) < k) {
                return;
            }
            // 如果数组长度已经达到k个，满足条件，推入ans中
            if (arr.length === k) {
                ans.push(arr);
                return;
            }
            // 选择当前数值推入数组，遍历下一个
            dfs(crr+1, k, [...arr, crr]);
            // 不选择当前数值，直接遍历下一个
            dfs(crr+1, k, arr);
        }
        dfs(1, k, []);
        return ans;
    };
  </script>
</body>
</html>